#include "widget.h"
#include "ui_widget.h"


Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    /*初始化ui*/
    ui->setupUi(this);
    /*初始化播放器*/
    this->MediaInit();
}

Widget::~Widget()
{
    delete ui;
    delete mPlayer;
}

void Widget::MediaInit()
{
    /*初始化widget*/
    this->setWindowTitle("卡比播放器");
    this->setWindowIcon(QPixmap(":/icon/image/Kirby.jpg"));
    /*初始化播放器*/
    mPlayer = new QMediaPlayer(this);
    mPlayer->setVideoOutput(ui->PlayerWidget);
    mAudio = new QAudioOutput(this);
    mPlayer->setAudioOutput(mAudio);
    ui->PlayerWidget->show();
    /*初始化音量*/
    ui->volumeSlider->setRange(0,100);
    ui->volumeSlider->setValue(10);
}


void Widget::videoListInit(void)
{
    // 1. 现有播放列表
    ui->videoList->clear();

    // 2. 打开文件夹选择对话框，让用户选择视频所在文件夹
    QString folderPath = QFileDialog::getExistingDirectory(
        this,                  // 父窗口
        tr("选择视频文件夹"),   // 对话框标题
        QDir::homePath()       // 默认打开路径（用户主目录）
        );

    // 3. 定义支持的视频文件扩展名
    QStringList videoExtensions = {
        "mp4", "avi", "mkv", "mov",  // 常见视频格式
        "flv", "wmv", "rmvb", "mpeg"
    };

    // 4. 遍历文件夹中的所有文件
    QDir videoDir(folderPath);
    // 获取文件夹中所有文件和文件夹的信息
    QFileInfoList fileInfoList = videoDir.entryInfoList(QDir::Files | QDir::NoDotAndDotDot);
    int itemCount = 0; // 计数：已添加的视频项数量

    foreach (const QFileInfo &fileInfo, fileInfoList) {
        // 限制最多显示10项，达到上限后停止添加
        if (itemCount >= 10) {
            // 可添加提示："已显示前10项，文件夹中可能有更多视频"
            QMessageBox::information(this, tr("提示"), tr("已加载前10项视频，文件夹中可能有更多文件"));
            break;
        }

        // 5. 筛选出视频文件（检查文件扩展名是否在支持列表中）
        QString fileExt = fileInfo.suffix().toLower(); // 获取小写扩展名
        if (videoExtensions.contains(fileExt)) {
            // 6. 创建列表项并添加到QListWidget
            QListWidgetItem *item = new QListWidgetItem();

            // 设置显示文本（仅显示文件名，不含路径）
            item->setText(fileInfo.fileName());

            // 设置选中状态（默认勾选）
            item->setCheckState(Qt::Checked);

            // 存储完整文件路径（用Qt::UserRole，方便后续播放时获取）
            item->setData(Qt::UserRole, fileInfo.absoluteFilePath());

            // 添加到列表
            ui->videoList->addItem(item);

            // 计数+1
            itemCount++;
        }
    }

    // 如果文件夹中没有符合条件的视频文件
    if (itemCount == 0) {
        QMessageBox::warning(this, tr("提示"), tr("所选文件夹中未找到支持的视频文件"));
    }
}


void Widget::on_startButton_clicked()
{
    mPlayer->play(); // 播放视频
}


void Widget::on_stopButton_clicked()
{
    mPlayer->pause();
}




void Widget::on_playerPosSlider_sliderMoved(int position)
{
    if (mPlayer->duration() <= 0) return;
    double sliderRatio = static_cast<double>(position) / ui->playerPosSlider->maximum();
    qint64 videoPostion = static_cast<qint64>(sliderRatio * mPlayer->duration());
    mPlayer->setPosition(videoPostion);
}


void Widget::on_volumeSlider_sliderMoved(int position)
{
    mAudio->setVolume(position/100.0);
}


void Widget::on_pushButton_clicked()
{
    videoListInit();
}


void Widget::on_videoList_itemClicked(QListWidgetItem *item)
{
    QString filePath = item->data(Qt::UserRole).toString();
    qDebug() << "当前点击项的路径" << filePath;
    mPlayer->setSource(filePath);
    // mPlayer->play();
}

